/***************************************************************************
 创建者：华磊
 开始时间：         : 2020.12.12
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   if条件指令属性编辑视窗
*                                                                         *
 ***************************************************************************/
#ifndef IFINSTRUCTIONVIEW_H
#define IFINSTRUCTIONVIEW_H

#include "ifinstructionview_global.h"
#include <QWidget>
#include <QTranslator>

class ProgramView;
class IfConditionDialog;
namespace Ui {
class IfInstructionView;
}

/**
 * @brief The IfInstructionView class　if条件指令属性编辑类
 */
class IFINSTRUCTIONVIEWSHARED_EXPORT IfInstructionView : public QWidget
{
    Q_OBJECT

public:
    IfInstructionView(int styleId,QWidget *parent = 0);


    void setProgromFileName(QString fileName);
    /**
     * @brief updateView    更新设置数据到界面控件上
     */
    void updateView();
    /**
     * @brief getInput      获取界面输入数据
     */
    void getInput();

    void changeLanguage(int language);

    void initialDisplayStyle(int styleId);

private:
    QTranslator translator;

public:
    ProgramView *programView;

    /**
     * @brief ifInstruction 条件指令
     */
    QString ifInstruction;
    /**
     * @brief ifCondition   条件
     */
    QString ifCondition;
    /**
     * @brief dealWith      处理方法
     */
    QString dealWith;

    /**
     * @brief dealWithFlag  处理方式选择  ０：JMP   １：CALL
     */
    int dealWithFlag;
    /**
     * @brief callLocation  调用路径
     */
    QString callLocation;
    /**
     * @brief callProgram   调用程序
     */
    QString callProgram;
    /**
     * @brief lblIndex      跳转标签号
     */
    QString labelStr;
    /**
     * @brief lblDataType   标签号类型　０:常数    1:存储在寄存器R中
     */
    int lblDataType;

    /**
     * @brief note          指令注释
     */
    QString note;

signals:
    /**
     * @brief selectJmp     选择JMP处理类型
     */
    void selectJmp();
    /**
     * @brief selectCall    选择CALL处理类型
     */
    void selectCall();
    /**
     * @brief browseCallProgram 浏览调用文件
     * @param callLocation      调用路径
     */
    void browseCallProgram(QString callLocation);
    /**
     * @brief cleanNote     清除指令注释
     */
    void cleanNote();

    /**
     * @brief finishEditInstruction 完成指令属性编辑
     */
    void finishEditInstruction();
    /**
     * @brief saveInstruction       保存编辑后的指令
     * @param ifInstruction         if指令
     */
    void saveInstruction(QString ifInstruction);

private slots:
    void sendCondition_slot(QString condition);
    /**
     * @brief on_JMP_radioButton_clicked    选择JMP处理类型槽函数
     */
    void on_JMP_radioButton_clicked();

    /**
     * @brief on_CALL_radioButton_clicked   选择CALL处理类型槽函数
     */
    void on_CALL_radioButton_clicked();

    /**
     * @brief on_browse_Btn_clicked     浏览调用文件槽函数
     */
    void on_browse_Btn_clicked();

    /**
     * @brief on_clearNote_Btn_clicked  清除指令注释槽函数
     */
    void on_clearNote_Btn_clicked();


    /**
     * @brief on_save_Btn_clicked       保存编辑后的指令槽函数
     */
    void on_save_Btn_clicked();


    void on_button_help_clicked();

private:
    Ui::IfInstructionView *ui;
    IfConditionDialog *conditionDialog;
};

#endif // IFINSTRUCTIONVIEW_H
